#!/usr/bin/env bash

# 数据库备份脚本
# 根据nacos配置中的数据库信息进行备份
# 兼容macOS zsh环境

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 数据库配置信息（来自nacos配置）
DB_HOST="localhost"
DB_PORT="3306"
DB_USER="root"
DB_PASSWORD="Lv997945!"

# 备份目录
BACKUP_DIR="./sql"
TIMESTAMP=$(date +"%Y%m%d%H%M%S")

# 数据库列表
DATABASES=("oauth2_server" "demo" "notification_server" "task_server")

# 显示帮助信息
show_help() {
    echo -e "${BLUE}数据库备份脚本${NC}"
    echo "使用方法: ./backup-databases.sh [选项]"
    echo ""
    echo "选项:"
    echo "  -h, --help     显示帮助信息"
    echo "  all            备份所有数据库（默认）"
    echo "  oauth2         备份oauth2_server数据库"
    echo "  demo           备份demo数据库"
    echo "  notification   备份notification_server数据库"
    echo "  task           备份task_server数据库"
    echo ""
    echo "示例:"
    echo "  ./backup-databases.sh all          # 备份所有数据库"
    echo "  ./backup-databases.sh demo         # 备份demo数据库"
    echo "  ./backup-databases.sh oauth2 task  # 备份oauth2和task数据库"
}

# 备份单个数据库
backup_database() {
    local db_name=$1
    local backup_file="${BACKUP_DIR}/${db_name}_backup_${TIMESTAMP}.sql"
    
    echo -e "${YELLOW}正在备份数据库: ${db_name}${NC}"
    
    # 执行备份命令
    # 使用command避免别名干扰，提高脚本兼容性
    command mysqldump \
        -h"${DB_HOST}" \
        -P"${DB_PORT}" \
        -u"${DB_USER}" \
        -p"${DB_PASSWORD}" \
        --single-transaction \
        --routines \
        --triggers \
        --events \
        --set-gtid-purged=OFF \
        --skip-lock-tables \
        "${db_name}" > "${backup_file}"
    
    # 检查备份是否成功
    if [ $? -eq 0 ]; then
        echo -e "${GREEN}数据库 ${db_name} 备份成功: ${backup_file}${NC}"
    else
        echo -e "${RED}数据库 ${db_name} 备份失败${NC}"
        return 1
    fi
}

# 备份所有数据库
backup_all_databases() {
    echo -e "${YELLOW}开始备份所有数据库...${NC}"
    
    for db in "${DATABASES[@]}"; do
        backup_database ${db}
        if [ $? -ne 0 ]; then
            echo -e "${RED}备份数据库 ${db} 时出错${NC}"
            return 1
        fi
    done
    
    echo -e "${GREEN}所有数据库备份完成${NC}"
}

# 主逻辑
main() {
    # 检查mysqldump是否存在
    if ! command -v mysqldump &> /dev/null; then
        echo -e "${RED}错误: 未找到mysqldump命令，请确保已安装MySQL客户端${NC}"
        echo -e "${YELLOW}提示: 在macOS上，可以使用 'brew install mysql' 安装MySQL客户端${NC}"
        exit 1
    fi
    
    # 检查备份目录是否存在
    if [ ! -d "${BACKUP_DIR}" ]; then
        echo -e "${YELLOW}创建备份目录: ${BACKUP_DIR}${NC}"
        mkdir -p ${BACKUP_DIR}
    fi
    
    # 检查参数
    if [ $# -eq 0 ]; then
        backup_all_databases
        exit 0
    fi
    
    # 处理选项
    case "$1" in
        -h|--help)
            show_help
            exit 0
            ;;
        all)
            backup_all_databases
            exit 0
            ;;
        oauth2)
            backup_database "oauth2_server"
            ;;
        demo)
            backup_database "demo"
            ;;
        notification)
            backup_database "notification_server"
            ;;
        task)
            backup_database "task_server"
            ;;
        *)
            echo -e "${RED}错误: 未知选项 $1${NC}"
            show_help
            exit 1
            ;;
    esac
}

# 执行主逻辑
main "$@"